.Dd $Mdocdate: February 23 2015 $
.Dt BN_BN2BIN 3
.Os
.Sh NAME
.Nm BN_bn2bin ,
.Nm BN_bin2bn ,
.Nm BN_bn2hex ,
.Nm BN_bn2dec ,
.Nm BN_hex2bn ,
.Nm BN_dec2bn ,
.Nm BN_print ,
.Nm BN_print_fp ,
.Nm BN_bn2mpi ,
.Nm BN_mpi2bn
.Nd format conversions
.Sh SYNOPSIS
.In openssl/bn.h
.Ft int
.Fo BN_bn2bin
.Fa "const BIGNUM *a"
.Fa "unsigned char *to"
.Fc
.Ft BIGNUM *
.Fo BN_bin2bn
.Fa "const unsigned char *s"
.Fa "int len"
.Fa "BIGNUM *ret"
.Fc
.Ft char *
.Fo BN_bn2hex
.Fa "const BIGNUM *a"
.Fc
.Ft char *
.Fo BN_bn2dec
.Fa "const BIGNUM *a"
.Fc
.Ft int
.Fo BN_hex2bn
.Fa "BIGNUM **a"
.Fa "const char *str"
.Fc
.Ft int
.Fo BN_dec2bn
.Fa "BIGNUM **a"
.Fa "const char *str"
.Fc
.Ft int
.Fo BN_print
.Fa "BIO *fp"
.Fa "const BIGNUM *a"
.Fc
.Ft int
.Fo BN_print_fp
.Fa "FILE *fp"
.Fa "const BIGNUM *a"
.Fc
.Ft int
.Fo BN_bn2mpi
.Fa "const BIGNUM *a"
.Fa "unsigned char *to"
.Fc
.Ft BIGNUM *
.Fo BN_mpi2bn
.Fa "unsigned char *s"
.Fa "int len"
.Fa "BIGNUM *ret"
.Fc
.Sh DESCRIPTION
.Fn BN_bn2bin
converts the absolute value of
.Fa a
into big-endian form and stores it at
.Fa to .
.Fa to
must point to
.Fn BN_num_bytes a
bytes of memory.
.Pp
.Fn BN_bin2bn
converts the positive integer in big-endian form of length
.Fa len
at
.Fa s
into a
.Vt BIGNUM
and places it in
.Fa ret .
If
.Fa ret
is
.Dv NULL ,
a new
.Vt BIGNUM
is created.
.Pp
.Fn BN_bn2hex
and
.Fn BN_bn2dec
return printable strings containing the hexadecimal and decimal encoding of
.Fa a
respectively.
For negative numbers, the string is prefaced with a leading minus sign.
The string must be freed later using
.Xr free 3 .
.Pp
.Fn BN_hex2bn
converts the string
.Fa str
containing a hexadecimal number to a
.Vt BIGNUM
and stores it in
.Pf * Fa a .
If
.Pf * Fa a
is
.Dv NULL ,
a new
.Vt BIGNUM
is created.
If
.Fa a
is
.Dv NULL ,
it only computes the number's length in hexadecimal digits.
If the string starts with a minus sign, the number is negative.
.Fn BN_dec2bn
is the same using the decimal system.
.Pp
.Fn BN_print
and
.Fn BN_print_fp
write the hexadecimal encoding of
.Fa a ,
with a leading minus sign for negative numbers, to the
.Vt BIO
or
.Vt FILE
.Fa fp .
.Pp
.Fn BN_bn2mpi
and
.Fn BN_mpi2bn
convert
.Vt BIGNUM Ns s
from and to a format that consists of the number's length in bytes
represented as a 4-byte big-endian number, and the number itself in
big-endian format, where the most significant bit signals a negative
number (the representation of numbers with the MSB set is prefixed with
a NUL byte).
.Pp
.Fn BN_bn2mpi
stores the representation of
.Fa a
at
.Fa to ,
where
.Fa to
must be large enough to hold the result.
The size can be determined by calling
.Fn BN_bn2mpi a , NULL .
.Pp
.Fn BN_mpi2bn
converts the
.Fa len
bytes long representation at
.Fa s
to a
.Vt BIGNUM
and stores it at
.Fa ret ,
or in a newly allocated
.Vt BIGNUM
if
.Fa ret
is
.Dv NULL .
.Sh RETURN VALUES
.Fn BN_bn2bin
returns the length of the big-endian number placed at
.Fa to .
.Fn BN_bin2bn
returns the
.Vt BIGNUM ,
or
.Dv NULL
on error.
.Pp
.Fn BN_bn2hex
and
.Fn BN_bn2dec
return a NUL-terminated string, or
.Dv NULL
on error.
.Fn BN_hex2bn
and
.Fn BN_dec2bn
return the number's length in hexadecimal or decimal digits, and 0 on
error.
.Pp
.Fn BN_print_fp
and
.Fn BN_print
return 1 on success, 0 on write errors.
.Pp
.Fn BN_bn2mpi
returns the length of the representation.
.Fn BN_mpi2bn
returns the
.Vt BIGNUM ,
or
.Dv NULL
on error.
.Pp
The error codes can be obtained by
.Xr ERR_get_error 3 .
.Sh SEE ALSO
.Xr ASN1_INTEGER_to_BN 3 ,
.Xr bn 3 ,
.Xr BN_num_bytes 3 ,
.Xr BN_zero 3 ,
.Xr ERR_get_error 3
.Sh HISTORY
.Fn BN_bn2bin ,
.Fn BN_bin2bn ,
.Fn BN_print_fp ,
and
.Fn BN_print
are available in all versions of SSLeay and OpenSSL.
.Pp
.Fn BN_bn2hex ,
.Fn BN_bn2dec ,
.Fn BN_hex2bn ,
.Fn BN_dec2bn ,
.Fn BN_bn2mpi ,
and
.Fn BN_mpi2bn
were added in SSLeay 0.9.0.
